//此js用于辅助百度地图操作，主要判断坐标位置是否在某个圆、矩形之内还是之外

var BMapLib = window.BMapLib = BMapLib || {}; (function () {
    var a = 6370996.81;
    var b = BMapLib.GeoUtils = function () { };
    b.isPointInRect = function (f, g) {
        if (!(f instanceof BMap.Point) || !(g instanceof BMap.Bounds)) {
            return false
        }
        var e = g.getSouthWest();
        var h = g.getNorthEast();
        return (f.lng >= e.lng && f.lng <= h.lng && f.lat >= e.lat && f.lat <= h.lat)
    };
    b.isPointInCircle = function (e, h) {
        if (!(e instanceof BMap.Point) || !(h instanceof BMap.Circle)) {
            return false
        }
        var i = h.getCenter();
        var g = h.getRadius();
        var f = b.getDistance(e, i);
        if (f <= g) {
            return true
        } else {
            return false
        }
    };
    b.isPointOnPolyline = function (f, h) {
        if (!(f instanceof BMap.Point) || !(h instanceof BMap.Polyline)) {
            return false
        }
        var e = h.getBounds();
        if (!this.isPointInRect(f, e)) {
            return false
        }
        var m = h.getPath();
        for (var k = 0; k < m.length - 1; k++) {
            var l = m[k];
            var j = m[k + 1];
            if (f.lng >= Math.min(l.lng, j.lng) && f.lng <= Math.max(l.lng, j.lng) && f.lat >= Math.min(l.lat, j.lat) && f.lat <= Math.max(l.lat, j.lat)) {
                var g = (l.lng - f.lng) * (j.lat - f.lat) - (j.lng - f.lng) * (l.lat - f.lat);
                if (g < 2e-10 && g > -2e-10) {
                    return true
                }
            }
        }
        return false
    };
    b.isPointInPolygon = function (o, l) {
        if (!(o instanceof BMap.Point) || !(l instanceof BMap.Polygon)) {
            return false
        }
        var k = l.getBounds();
        if (!this.isPointInRect(o, k)) {
            return false
        }
        var t = l.getPath();
        var h = t.length;
        var n = true;
        var j = 0;
        var g = 2e-10;
        var s, q;
        var e = o;
        s = t[0];
        for (var f = 1; f <= h; ++f) {
            if (e.equals(s)) {
                return n
            }
            q = t[f % h];
            if (e.lat < Math.min(s.lat, q.lat) || e.lat > Math.max(s.lat, q.lat)) {
                s = q;
                continue
            }
            if (e.lat > Math.min(s.lat, q.lat) && e.lat < Math.max(s.lat, q.lat)) {
                if (e.lng <= Math.max(s.lng, q.lng)) {
                    if (s.lat == q.lat && e.lng >= Math.min(s.lng, q.lng)) {
                        return n
                    }
                    if (s.lng == q.lng) {
                        if (s.lng == e.lng) {
                            return n
                        } else {
                            ++j
                        }
                    } else {
                        var r = (e.lat - s.lat) * (q.lng - s.lng) / (q.lat - s.lat) + s.lng;
                        if (Math.abs(e.lng - r) < g) {
                            return n
                        }
                        if (e.lng < r) {
                            ++j
                        }
                    }
                }
            } else {
                if (e.lat == q.lat && e.lng <= q.lng) {
                    var m = t[(f + 1) % h];
                    if (e.lat >= Math.min(s.lat, m.lat) && e.lat <= Math.max(s.lat, m.lat)) {
                        ++j
                    } else {
                        j += 2
                    }
                }
            }
            s = q
        }
        if (j % 2 == 0) {
            return false
        } else {
            return true
        }
    };
    b.degreeToRad = function (e) {
        return Math.PI * e / 180
    };
    b.radToDegree = function (e) {
        return (180 * e) / Math.PI
    };
    function d(g, f, e) {
        if (f != null) {
            g = Math.max(g, f)
        }
        if (e != null) {
            g = Math.min(g, e)
        }
        return g
    }
    function c(g, f, e) {
        while (g > e) {
            g -= e - f
        }
        while (g < f) {
            g += e - f
        }
        return g
    }
    b.getDistance = function (j, h) {
        if (!(j instanceof BMap.Point) || !(h instanceof BMap.Point)) {
            return 0
        }
        j.lng = c(j.lng, -180, 180);
        j.lat = d(j.lat, -74, 74);
        h.lng = c(h.lng, -180, 180);
        h.lat = d(h.lat, -74, 74);
        var f, e, i, g;
        f = b.degreeToRad(j.lng);
        i = b.degreeToRad(j.lat);
        e = b.degreeToRad(h.lng);
        g = b.degreeToRad(h.lat);
        return a * Math.acos((Math.sin(i) * Math.sin(g) + Math.cos(i) * Math.cos(g) * Math.cos(e - f)))
    };
    b.getPolylineDistance = function (f) {
        if (f instanceof BMap.Polyline || f instanceof Array) {
            var l;
            if (f instanceof BMap.Polyline) {
                l = f.getPath()
            } else {
                l = f
            }
            if (l.length < 2) {
                return 0
            }
            var j = 0;
            for (var h = 0; h < l.length - 1; h++) {
                var k = l[h];
                var g = l[h + 1];
                var e = b.getDistance(k, g);
                j += e
            }
            return j
        } else {
            return 0
        }
    };
    b.getPolygonArea = function (t) {
        if (!(t instanceof BMap.Polygon) && !(t instanceof Array)) {
            return 0
        }
        var R;
        if (t instanceof BMap.Polygon) {
            R = t.getPath()
        } else {
            R = t
        }
        if (R.length < 3) {
            return 0
        }
        var w = 0;
        var D = 0;
        var C = 0;
        var L = 0;
        var J = 0;
        var F = 0;
        var E = 0;
        var S = 0;
        var H = 0;
        var p = 0;
        var T = 0;
        var I = 0;
        var q = 0;
        var e = 0;
        var M = 0;
        var v = 0;
        var K = 0;
        var N = 0;
        var s = 0;
        var O = 0;
        var l = 0;
        var g = 0;
        var z = 0;
        var Q = 0;
        var G = 0;
        var j = 0;
        var A = 0;
        var o = 0;
        var m = 0;
        var y = 0;
        var x = 0;
        var h = 0;
        var k = 0;
        var f = 0;
        var n = a;
        var B = R.length;
        for (var P = 0; P < B; P++) {
            if (P == 0) {
                D = R[B - 1].lng * Math.PI / 180;
                C = R[B - 1].lat * Math.PI / 180;
                L = R[0].lng * Math.PI / 180;
                J = R[0].lat * Math.PI / 180;
                F = R[1].lng * Math.PI / 180;
                E = R[1].lat * Math.PI / 180
            } else {
                if (P == B - 1) {
                    D = R[B - 2].lng * Math.PI / 180;
                    C = R[B - 2].lat * Math.PI / 180;
                    L = R[B - 1].lng * Math.PI / 180;
                    J = R[B - 1].lat * Math.PI / 180;
                    F = R[0].lng * Math.PI / 180;
                    E = R[0].lat * Math.PI / 180
                } else {
                    D = R[P - 1].lng * Math.PI / 180;
                    C = R[P - 1].lat * Math.PI / 180;
                    L = R[P].lng * Math.PI / 180;
                    J = R[P].lat * Math.PI / 180;
                    F = R[P + 1].lng * Math.PI / 180;
                    E = R[P + 1].lat * Math.PI / 180
                }
            }
            S = Math.cos(J) * Math.cos(L);
            H = Math.cos(J) * Math.sin(L);
            p = Math.sin(J);
            T = Math.cos(C) * Math.cos(D);
            I = Math.cos(C) * Math.sin(D);
            q = Math.sin(C);
            e = Math.cos(E) * Math.cos(F);
            M = Math.cos(E) * Math.sin(F);
            v = Math.sin(E);
            K = (S * S + H * H + p * p) / (S * T + H * I + p * q);
            N = (S * S + H * H + p * p) / (S * e + H * M + p * v);
            s = K * T - S;
            O = K * I - H;
            l = K * q - p;
            g = N * e - S;
            z = N * M - H;
            Q = N * v - p;
            m = (g * s + z * O + Q * l) / (Math.sqrt(g * g + z * z + Q * Q) * Math.sqrt(s * s + O * O + l * l));
            m = Math.acos(m);
            G = z * l - Q * O;
            j = 0 - (g * l - Q * s);
            A = g * O - z * s;
            if (S != 0) {
                o = G / S
            } else {
                if (H != 0) {
                    o = j / H
                } else {
                    o = A / p
                }
            }
            if (o > 0) {
                y += m;
                k++
            } else {
                x += m;
                h++
            }
        }
        var u, r;
        u = y + (2 * Math.PI * h - x);
        r = (2 * Math.PI * k - y) + x;
        if (y > x) {
            if ((u - (B - 2) * Math.PI) < 1) {
                f = u
            } else {
                f = r
            }
        } else {
            if ((r - (B - 2) * Math.PI) < 1) {
                f = r
            } else {
                f = u
            }
        }
        w = (f - (B - 2) * Math.PI) * n * n;
        return w
    }
})();